using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Marlimer.Common;
using Marlimer.Logistico.Mantenimientos;
using Marlimer.Logistico.Consultas;
using Marlimer.Logistico.Procesos;
using Marlimer.Logistico.Reportes.Formularios;
using Marlimer.Common.Entidades;
using Marlimer.Logical.Sistema;
using Marlimer.Logical.Formularios; 

namespace Marlimer.Logistico
{
    public partial class MDI_Principal : Form
    {
        private Boolean terminar = false;
        //la aplicacion de codigo 2 es la logistica
        private int ccod_appl = Session.getInfousuario().ccod_appl;

        public MDI_Principal()
        {
            InitializeComponent();
            //si no se logeo correctamente se anula
            
        }

        private void MDI_Principal_Load(object sender, EventArgs e)
        {
            if (Session.getInfousuario().ccod_user == 0)
            {
                terminar = true;
                MessageBox.Show("Para ingresar a la aplicacion debe logearse previamente. Se cerrara la aplicacion", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                Application.Exit();
            }
            else
            {
                String nomUsuario = "";
                nomUsuario = "   Usuario: " + Session.getInfousuario().cape_pat + " " + Session.getInfousuario().cape_mat + ", " + Session.getInfousuario().cnombres;
                staPrincipal.Items[0].Text = nomUsuario;
                staPrincipal.Items[1].Text = "   Nombre PC: " + Session.getComputerName();
                staPrincipal.Items[2].Text = "   Usuario PC: " + Session.getInfoUserWindows();
                //Segun el tipo de empresa se cambia
                if (Session.Empresa == enumGlobal.enumEmpresas.Marlimer)
                {
                    this.Text = "Sistema Control Existencias MARLIMER" + " - Login: " + Session.getInfousuario().clogin;
                }
                else
                {
                    this.Text = "Sistema Control Existencias ALIMER" + " - Login: " + Session.getInfousuario().clogin;
                }
            }

            //crear los menus en las tablas
            //crearMenus();

            //establecer las opciones/accesos que tiene el usuario
            doEstablecerMenus();
        }

        private void crearMenus()
        {
            //variable para los valores
            String cnom_menu;

            List<InfoMenus> mnus = new List<InfoMenus>();

            for (int i = 0; i < menuStrip.Items.Count; i++)
            {
                //si es visible de agrega
                if (menuStrip.Items[i].Visible)
                {
                    cnom_menu = menuStrip.Items[i].Text;
                    InfoMenus mnu = new InfoMenus(0, ccod_appl, i, cnom_menu, 1, 1, 0, "A", 1);
                    mnus.Add(mnu);
                    //recorrer de forma recursiva por sus hijos
                    recursiveMenuOptions(2, i, (ToolStripMenuItem)menuStrip.Items[i], mnus);
                }
            }

            //si hay items en lista
            if (mnus.Count > 0)
            {
                //declarar variable
                lsis_Sistema lsis_sistema = new lsis_Sistema();

                //guardar en BD
                if (lsis_sistema.doCrearMenus(mnus))
                {
                    //bien
                }
            }


        }

        private void recursiveMenuOptions(int nnivel, int npadre, ToolStripMenuItem mnui, List<InfoMenus> mnus)
        {
            String cnom_menu;

            for (int i = 0; i < mnui.DropDownItems.Count; i++)
            {
                if (mnui.DropDownItems[i].GetType().Name == "ToolStripMenuItem" && mnui.DropDownItems[i].Available)
                {
                    InfoMenus mnu;

                    ToolStripMenuItem mnutool = (ToolStripMenuItem)mnui.DropDownItems[i];
                    cnom_menu = mnutool.Text;
                    //si hay sub items entonces se sigue
                    if (mnutool.DropDownItems.Count > 0)
                    {
                        mnu = new InfoMenus(0, ccod_appl, i, cnom_menu, nnivel, 1, i, "A", 1);
                        recursiveMenuOptions(nnivel + 1, i, mnutool, mnus);
                    }
                    else
                    {
                        mnu = new InfoMenus(0, ccod_appl, i, cnom_menu, nnivel, 0, npadre, "A", 1);
                    }
                    mnus.Add(mnu);
                }
            }
        }


        private void doEstablecerMenus()
        {
            //si quien ingresa no es el administrador
            int ntip_user = Session.getInfousuario().ctip_user;

            if (ntip_user == 2)
            {
                //recorrer los menus principales
                for (int i = 0; i < menuStrip.Items.Count; i++)
                {
                    //si el menu principal tiene hijos
                    if (((ToolStripMenuItem)menuStrip.Items[i]).DropDownItems.Count > 0)
                    {
                        recursiveMenuHabilita(2, i, (ToolStripMenuItem)menuStrip.Items[i]);
                    }
                }
            }
        }

        private void recursiveMenuHabilita(int nnivel, int npadre, ToolStripMenuItem mnui)
        {
            lsis_Sistema lsis_sistema = new lsis_Sistema();
            DataTable dtHijos = lsis_sistema.getAdminMenusHijos(npadre, nnivel, Session.getInfousuario().ccod_user, ccod_appl);

            for (int i = 0; i < mnui.DropDownItems.Count; i++)
            {
                if (mnui.DropDownItems[i].GetType().Name == "ToolStripMenuItem" && mnui.DropDownItems[i].Available)
                {
                    ToolStripMenuItem mnutool = (ToolStripMenuItem)mnui.DropDownItems[i];

                    //si hay sub items entonces se sigue
                    if (mnutool.DropDownItems.Count > 0)
                    {

                        recursiveMenuHabilita(nnivel + 1, i, mnutool);
                    }
                    else
                    {
                        //verificar si el menu debe ser habilitado
                        DataRow[] drs = dtHijos.Select("nindex=" + i);
                        if (drs.Length > 0)
                        {
                            mnutool.Enabled = true;
                        }
                        else
                        {
                            mnutool.Enabled = false;
                        }
                    }
                }
            }
        }

        private void mnuProcesos_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            int indice = mnuProcesos.DropDownItems.IndexOf(e.ClickedItem);
            switch (indice)
            {
                case 0:
                    {
                        frm_GuiaAlmacen Frm_GuiaAlmacen = new frm_GuiaAlmacen();
                        Frm_GuiaAlmacen.MdiParent = this;
                        Frm_GuiaAlmacen.Show();  
                        break;
                    }
                case 1:
                    {
                        frm_DocumentosProv Frm_DocumentosProv = new frm_DocumentosProv();
                        Frm_DocumentosProv.MdiParent = this;
                        Frm_DocumentosProv.Show();
                        break;
                    }
                case 3:
                    {
                        frm_DevolucionDocumentos Frm_DevolucionDocumentos = new frm_DevolucionDocumentos();
                        Frm_DevolucionDocumentos.MdiParent = this;
                        Frm_DevolucionDocumentos.Show();
                        break;
                    }
                case 4:
                    {
                        frm_DevolucionParcialDocs Frm_DevolucionParcialDocs = new frm_DevolucionParcialDocs();
                        Frm_DevolucionParcialDocs.MdiParent = this;
                        Frm_DevolucionParcialDocs.Show();
                        break;
                    }
                case 6:
                    {
                        frm_ActualizarSaldosDiarios Frm_ActualizarSaldosDiarios = new frm_ActualizarSaldosDiarios();
                        Frm_ActualizarSaldosDiarios.ShowDialog();
                        break;
                    }
                case 7:
                    {
                        frm_ProductoEnTransito Frm_ProductoEnTransito = new frm_ProductoEnTransito();
                        Frm_ProductoEnTransito.MdiParent = this; 
                        Frm_ProductoEnTransito.Show(); 
                        break; 
                    }
            }
        }

        private void MDI_Principal_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (!terminar)
            {
                if (MessageBox.Show("Seguro que desea cerrar?", Session.getParametros().tituloAppCom, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                {
                    terminar = true;
                }
                else
                {
                    e.Cancel = true;
                }
            }
        }

        private void MDI_Principal_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (terminar)
            {
                Application.Exit(); 
            }
        }

        private void mnuConsultas_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            int indice = mnuConsultas.DropDownItems.IndexOf(e.ClickedItem);
            switch (indice)
            {
                case 0:
                    {
                        frm_ConsultaProductos Frm_ConsultaProductos = new frm_ConsultaProductos();
                        Frm_ConsultaProductos.MdiParent = this;
                        Frm_ConsultaProductos.Show(); 
                        break;
                    }
                case 1:
                    {
                        frm_ConsultaDocumentosProv Frm_ConsultaDocumentosProv = new frm_ConsultaDocumentosProv();
                        Frm_ConsultaDocumentosProv.MdiParent = this;
                        Frm_ConsultaDocumentosProv.Show();  
                        break;
                    }
                case 2:
                    {
                        frm_ConsultaProveedores Frm_ConsultaProveedores = new frm_ConsultaProveedores();
                        Frm_ConsultaProveedores.MdiParent = this;
                        Frm_ConsultaProveedores.Show();  
                        break;
                    }
                case 3:
                    {
                        frm_ConsultaGuiaAlmacen Frm_ConsultaGuiaAlmacen = new frm_ConsultaGuiaAlmacen();
                        Frm_ConsultaGuiaAlmacen.MdiParent = this;
                        Frm_ConsultaGuiaAlmacen.Show();  
                        break; 
                    }
                case 4:
                    {
                        frm_StockAFecha Frm_StockAFecha = new frm_StockAFecha();
                        Frm_StockAFecha.MdiParent = this;
                        Frm_StockAFecha.Show();
                        break; 
                    }
            }
        }

        private void mnuMantenimiento_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            int indice = mnuMantenimiento.DropDownItems.IndexOf(e.ClickedItem);
            switch (indice)
            {
                case 0:
                    {
                        frm_Productos Frm_Productos = new frm_Productos();
                        Frm_Productos.MdiParent = this;
                        Frm_Productos.Show(); 
                        break;
                    }
                case 1:
                    {
                        frm_Proveedores Frm_Proveedores = new frm_Proveedores();
                        Frm_Proveedores.MdiParent = this;
                        Frm_Proveedores.Show(); 
                        break; 
                    }
                case 2:
                    {
                        frm_GrupoVenta Frm_GrupoVenta = new frm_GrupoVenta();
                        Frm_GrupoVenta.MdiParent = this;
                        Frm_GrupoVenta.Show();  
                        break; 
                    }
                case 3:
                    {
                        frm_Linea Frm_Linea = new frm_Linea();
                        Frm_Linea.MdiParent = this;
                        Frm_Linea.Show();  
                        break; 
                    }
                case 4:
                    {
                        frm_SubLinea Frm_SubLinea = new frm_SubLinea();
                        Frm_SubLinea.MdiParent = this;
                        Frm_SubLinea.Show();  
                        break; 
                    }
                case 5:
                    {
                        frm_Presentacion Frm_Presentacion = new frm_Presentacion();
                        Frm_Presentacion.MdiParent = this;
                        Frm_Presentacion.Show();  
                        break; 
                    }
                case 6:
                    {
                        frm_Marca Frm_Marca = new frm_Marca();
                        Frm_Marca.MdiParent = this;
                        Frm_Marca.Show();  
                        break; 
                    }
                case 7:
                    {
                        frm_UnidadMedida Frm_UnidadMedida = new frm_UnidadMedida();
                        Frm_UnidadMedida.MdiParent = this;
                        Frm_UnidadMedida.Show();  
                        break;
                    }
            }
        }

        private void mnuReportes_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            int indice = mnuReportes.DropDownItems.IndexOf(e.ClickedItem);
            switch (indice)
            {
                case 0:
                    {
                        frm_DevolucionXTransportista FrmDevolucionXTransportista = new frm_DevolucionXTransportista();
                        FrmDevolucionXTransportista.MdiParent = this;
                        FrmDevolucionXTransportista.Show();
                        break;
                    }
            }
        }

        private void mnuSistema_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            int indice = mnuSistema.DropDownItems.IndexOf(e.ClickedItem);
            switch (indice)
            {
                case 0:
                    {
                        //cerrar la session
                        Application.Exit();
                        break;
                    }
                case 1:
                    {
                        frm_CambiarContrasenia Frm_CambiarContrasenia = new frm_CambiarContrasenia();
                        Frm_CambiarContrasenia.ShowDialog();
                        break;
                    }
            }
        }
    }
}
